forEach is not a function

Descripcion

Al lanzar los tests se produce la siguiente situacion:

Lo curioso es que la situación no se produce siempre, si se lanzan los tests varias veces solo se da este caso algunas de ellas

El código del forEach esta situado aqui:

El error se produce porque a veces el valor que se lee es un objeto en vez de un array

Cuando el valor de memberLanguages es un objeto no contiene la funcion forEach y se produce ese error

Una solucion en este caso es la de añadir Array.from a memberLanguages tal que así:

Array.from(memberLanguages).forEach(

De esta manera nos aseguramos siempre de que memberLanguages siempre sea un array

Solución final

De todos modos esa solución no arregla el problema de raiz, ya que en teoría memberlanguages debería de ser siempre un array, en este caso el problema venía dado en el test, ya que estaba pasando un objeto que no era:

Codigo erroneo:

Codigo correcto:

el problema viene dado porque el valor por defecto que tiene el array es el correcto, (un array de skills), pero el flush hace que se le asigne el valor incorrecto (ya que estaba mal puesto en el test), de manera que dependiendo de cuan rapido se ejecutase la solicitud http (mockeada) pues se cargaba un valor u otro, y en caso de que se cargase el valor de membersProfileMock (que es un objeto y no un array) es cuando se produce el error de forEach is not a function

Array de skills:

Objeto de membersProfileMock:

Nota

De hecho me he dado de cuenta de que incluso en la pantalla de karma aunque salgan todos los tests OK el error siempre aparece en consola, osea que el error no es que aparezca siempre sino mas bien que karma solo lo muestra en ciertas ocasiones (igual dependiendo del tiempo de ejecucion)

Tags

forEach | test | Error